package com.painpointcloud.common.util.aimind;
/**
 * Created by JackLeon on 2017/8/22 14:24
 * description:
 **/
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class AutoCoding {
	public static void main(String[] args) {
		
//		String str = "p_name	姓名";
//		String pattern = "^[a-z]+_.*[a-z]";
//		Pattern r = Pattern.compile(pattern);
//		Matcher m = r.matcher(str);
//		if(m.find()){
//			System.out.println(m.group(0));
//		}
		//System.out.println(m.find());
		String filePath="E:\\files\\file.txt";
		String outFilePath="E:\\files\\file_out.txt";
		System.out.println("开始自动编程...");
		List<String> list=readTxtFile(filePath,"2");
		System.out.println("统计记录行数："+list.size());
		writeTxtFile(list,outFilePath);
		System.out.println("自动编程完毕！");
	}
	
	
	/**
	 * 功能：Java读取txt文件的内容,每一行划分为一个元素放到List中
	 * 步骤：1：先获得文件句柄
	 * 2：获得文件句柄当做是输入一个字节码流，需要对这个输入流进行读取
	 * 3：读取到输入流后，需要读取生成字节流
	 * 4：一行一行的输出。readline()。
	 * 备注：需要考虑的是异常情况
	 * @param filePath:需要读取的文件路径  例如："E:\\files\\file.txt";
	 * @param type 1.自动生成保存动态列代码;2.自动生成保存动态值代码
	 */
	public static List<String> readTxtFile(String filePath,String type){
		String pattern = "^[a-z]+.*[a-z]";
	    List<String> strList=new ArrayList<String>();
	    try {    
	            String encoding="GBK";
	            File file=new File(filePath);
	            if(file.isFile() && file.exists()){ //判断文件是否存在
	                InputStreamReader read = new InputStreamReader(
	                new FileInputStream(file),encoding);//考虑到编码格式
	                BufferedReader bufferedReader = new BufferedReader(read);
	                String lineTxt = null;
	                while((lineTxt = bufferedReader.readLine()) != null){
	                    //System.out.println(lineTxt);
	                    //System.out.println(checkMobile(lineTxt));
	                	Pattern r = Pattern.compile(pattern);
	            		Matcher m = r.matcher(lineTxt);
	            		if(m.find()){
	            			//strList.add(m.group(0));
	            			String str=m.group(0).trim();
	            			String s="";//存放拼写行数据
	            			if("1".equals(type)){
	            				s="<if test=\""+str+"!=null\">\n"+str+",\n</if>"; //自动生成save动态列代码
	            			}else if("2".equals(type)){
	            				 s="<if test=\""+str+"!=null\">\n"+"#{"+str+"},\n</if>"; //自动生成save动态值代码
	            			}else if("3".equals(type)){
	            				 s="<if test=\""+str+"!=null\">\n"+str+"=#{"+str+"},\n</if>"; //自动生成update动态设置值代码
	            			}
	            			strList.add(s);
	            			//strList.add(m.group(0).trim()+",");
	            		}
	                	//String[] str=lineTxt.split("\t");
	                    //strList.add(str[0]);
	                }
	                read.close();
	    }else{
	        System.out.println("找不到指定的文件");
	    }
	    } catch (Exception e) {
	        System.out.println("读取文件内容出错");
	        e.printStackTrace();
	    }
	    return strList;
	}
	/**
	 * 功能：Java读取一个List的内容,每一个元素一行写入本地的一个txt文件中
	 * @param resultList:传入的集合参数  
	 * @param outFilePath:输出文件路径
	 */
	public static void writeTxtFile(List<String> resultList,String outFilePath){
	    FileWriter fw=null;
	      try {
	       String line = System.getProperty("line.separator");
	       StringBuffer str = new StringBuffer();
	       File file = new File(outFilePath);  
	       if(file.exists()){
	    	   file.delete();
	       }
	       fw = new FileWriter(outFilePath, true);
	       for(String result:resultList){
	           str.append(result).append(line);
	       }
	       fw.write(str.toString());
	       fw.close();
	      } catch (IOException e) {
	       // TODO Auto-generated catch block
	       e.printStackTrace();
	      }finally {  
	          if (fw != null)  
	              try {  
	                  fw.close();  
	              } catch (IOException e) {  
	                  throw new RuntimeException("关闭失败！");  
	              }  
	      }  
	}
	
}
